﻿using System;
using System.Collections.Generic;
using System.Text;
using CeA.Reports.Atendimento.DataAccess.DTO;
using System.Data.OracleClient;
using System.Data;
using CeA.Reports.Atendimento.DataAccess.Helpers;
using CeA.Reports.Atendimento.DataAccess.Criteria;
using IBatisNet.DataMapper;

namespace CeA.Reports.Atendimento.DataAccess.DAO.Oracle {
    public class OracleRfsImpl : Rfs {
        

        public OracleRfsImpl() {
            // m_connection = OracleDAOFactory.CreateConnection();
        }

        /// <summary>
        /// Lista as RFS com critério de busca.
        /// </summary>
        /// <returns></returns>
        public List<RfsDTO> ListarIdentificacao(RfsCriteria criteria) {
            IList<RfsDTO> list = Mapper.Instance()
                   .QueryForList<RfsDTO>("rfsSelectList", criteria);
            return (List<RfsDTO>)list;
        }



        // <summary>
        /// Insere uma nova RFS.
        /// </summary>
        /// <returns></returns>
        public RfsDTO Salvar(RfsDTO rfs) {
            int rfsKey = (int)Mapper.Instance().Insert("rfsInsert", rfs);
            rfs.Id = rfsKey;
            //RfsDTO rfs_dto = Mapper.Instance().QueryForObject("selectRfs", rfsKey) as RfsDTO;
            return rfs;
        }


        public void Atualizar(RfsDTO rfs) {
            Mapper.Instance().Update("rfsUpdate", rfs);
        }

        public void Excluir(int id) {
            String listaRegiao = checkForExistingRegiao(id);
            if (listaRegiao != null)
                throw new InvalidOperationException("Há região com dependencia nessa rfs. Exclua a dependencia com a(s) região):[" + listaRegiao + "].");
            
            Mapper.Instance().Delete("rfsDelete", id);
        }

        private string checkForExistingRegiao(int id)
        {
            IList<String> list = Mapper.Instance()
                   .QueryForList<String>("rfsSelectListRegiao", id);

            String listaRegiao = null;
            foreach (String row in list)
            {
                listaRegiao += row.ToString() + ", ";
            }

            return listaRegiao;
        }
    }
}
